package ui.juego.mapamundi

import dominio.ubicaciones.Pais
import java.util.List
import org.uqbar.commons.model.ObservableUtils
import org.uqbar.commons.utils.Observable
import org.uqbar.commons.model.UserException

@Observable
class EditarConexion {
	
	@Property Pais pais
	@Property Pais conexionSeleccionada
	@Property Pais conexionPosibleSeleccionada
	@Property List<Pais> conexionesPosibles
	@Property List<Pais> conexiones
	
	new(Pais pais) {
		this.pais = pais
		this.conexiones = pais.conexiones
		actualizarPosibles	
	}
	
	def void actualizarPosibles() {
		conexionesPosibles = pais.mapamundi.paises.filter[p | puedeConectarseA(p)].toList
		ObservableUtils.firePropertyChanged(this, "conexionesPosibles", conexionesPosibles)		
	}
	
	def puedeConectarseA(Pais paisAConectar) {
		(!conexiones.contains(paisAConectar)) &&
		pais != paisAConectar		
	}
	
	def eliminarConexionSeleccionada() {
		if(conexionSeleccionada != null)
			pais.eliminarConexion(conexionSeleccionada)
		else throw new UserException("No hay un pais seleccionado!")
		ObservableUtils.firePropertyChanged(this,"conexiones", conexiones)
		actualizarPosibles
	}
	
	def agregarConexionPosibleSeleccionada() {
		if(conexionPosibleSeleccionada != null) 
			pais.agregarConexion(conexionPosibleSeleccionada)
		else throw new UserException("No se hay seleccionado un pais!")
		ObservableUtils.firePropertyChanged(this, "conexiones", conexiones)
		actualizarPosibles
	}
	
}